package main

import (
	"log"
	"ulcdkey/conf"
	h "ulcdkey/handler"

	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)

type Ret struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

func main() {
	e := echo.New()
	e.HTTPErrorHandler = func(e error, c echo.Context) {
		if r, ok := e.(*echo.HTTPError); ok && (r.Code == 401 || r.Code == 400) {
			// jwt 过期
			log.Println(e)
			c.JSON(200, &Ret{Code: r.Code, Msg: "登录过期 请按F5刷新！"})
			return
		}

		if c.Request().Method == "OPTIONS" || c.Request().Method == "options" {
			return
		}

		c.Redirect(302, "/dist")
	}

	e.Use(middleware.Recover())
	e.Use(middleware.GzipWithConfig(middleware.GzipConfig{
		Level: 5,
	}))

	e.Static("/", "public")

	// 前后端分离dev环境下使用
	if conf.Conf.EnvDevelopment {
		//log.Println("env_dev")
		e.Use(h.CorssDoMain) //解决跨域问题
		e.GET("/login", h.RenderAccountLogin)
		e.POST("/login", h.Login) //账号密码登录方式
	} else {
		//企业微信登录
		e.GET("/index", h.RenderIndex)
		e.GET("/login", h.RenderLogin)
		e.GET("/auth", h.RenderAuth)
	}

	a := e.Group("/api")
	a.Use(middleware.JWT([]byte(conf.Conf.JwtSecret)))
	a.Use(h.CheckRole)

	a.GET("/user/info", h.GetUserInfo)
	a.GET("/user/menu", h.GetMenuByRole)

	//用户管理
	a.GET("/user/get", h.GetUsers)                         //获取所有用户
	a.POST("/user/mod", h.ModUser)                         //修改用户
	a.POST("/user/refreshCacheUsers", h.RefreshCacheUsers) //更新用户缓存数据

	// 角色管理
	a.GET("/role/get", h.GetRoles)                           //获取角色
	a.POST("/role/add", h.AddRole)                           //添加角色
	a.GET("/role/getMenuAuthTree", h.GetMenuAuthTree)        //获取角色权限菜单
	a.POST("/role/updateRoleMenuAuth", h.UpdateRoleMenuAuth) //更新角色菜单权限

	// 游戏管理

	a.GET("/game/getGameList", h.GetGameList)         // 获取所有游戏列表
	a.GET("/game/getAuthGameList", h.GetAuthGameList) // 获取用户权限的游戏列表
	//a.GET("/game/getGameListByPlatform", h.GetGameListByPlatform) // 根据平台获取游戏列表
	a.POST("/game/add", h.AddGame)       // 新增游戏
	a.POST("/game/update", h.UpdateGame) // 更新游戏

	//a.POST("/game/del",h.DelGame) // 删除游戏

	// 渠道管理
	a.GET("/channel/getChannelList", h.GetChannelList)                     //获取渠道列表
	a.GET("/channel/getChannelListByPlatform", h.GetChannelListByPlatform) //根据平台获取渠道列表
	a.POST("/channel/add", h.AddChannel)                                   // 新增渠道
	a.POST("/channel/update", h.UpdateChannel)                             // 更新渠道
	a.POST("/channel/del", h.DelChannel)                                   // 删除渠道

	// cdk类
	a.GET("/cdkType/getByGameId", h.GetCdkTypeListByGameId) // 根据游戏id获取cdk类列表
	a.POST("/cdkType/add", h.AddCdkType)                    // 新增cdk类
	a.POST("/cdkType/update", h.UpdateCdkType)              // 更新cdk类
	//a.POST("/cdkType/del",h.DelCdkType)// 删除cdk类

	//cdk
	a.GET("/cdk/getCdkList", h.GetCdkList)                 // 根据cdk类id获取cdk列表
	a.POST("/cdk/add", h.AddSomeCdk)                       // 生成若干条cdk
	e.GET("/cdk/getCdkWorkerlength", h.GetCdkWorkerlength) // 根据cdk类id获取cdk列表

	// 兑换日志
	a.GET("/exchange/log", h.GetExchangeLog) // 查询兑换日志

	//http://192.168.1.124:7676/commoncdk/usecdk?userId=testsss&cdkStr=hk2ff784&appId=26&channelId=0
	e.GET("/commoncdk/usecdk", h.UseCdk) // 使用cdk

	// 上传文件
	a.POST("/file/upload", h.UploadFile) // 上传文件

	//开启定时转存任务
	h.SetTimeOutTask()

	/*
		日志查询

	*/
	a.GET("/log/queryLog", h.QueryLog)
	a.GET("/log/queryLogDetail", h.QueryLogDetail)

	if err := e.Start(":" + conf.Conf.Port); err != nil {
		panic(err)
	}

}
